//package com.geostar.constructionland.attachment.fileconverter;
//
//import cn.hutool.core.io.FileUtil;
//import cn.hutool.core.lang.UUID;
//import com.aspose.words.Document;
//import com.aspose.words.ImageSaveOptions;
//import com.aspose.words.License;
//import com.aspose.words.SaveFormat;
//import java.awt.image.BufferedImage;
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.FileNotFoundException;
//import java.io.FileOutputStream;
//import java.io.IOException;
//import java.io.InputStream;
//
//import com.geostar.constructionland.attachment.config.StaticValue;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.io.FileUtils;
//import org.apache.commons.io.FilenameUtils;
//import org.apache.commons.io.IOUtils;
//import org.apache.commons.lang3.StringUtils;
//import org.apache.pdfbox.pdmodel.PDDocument;
//import org.apache.pdfbox.rendering.ImageType;
//import org.apache.pdfbox.rendering.PDFRenderer;
//import org.apache.pdfbox.tools.imageio.ImageIOUtil;
//
//@Slf4j
//public class FileTypeConverter {
//
////  private static JodConverterBean jodConverterBean = SpringContextUtil.getBean("jodConverterBean");
//  private static boolean isLicensed = checkLicense();
//
//  /**
//   * office转成pdf
//   * 利用JodConverter + LibreOffice实现
//   * 问题：排版发生变化 效果不佳
//   */
//  /*public static boolean office2pdf(File inputFile, File outputFile) {
//    String inputFilePath = inputFile.getAbsolutePath();
//    String outputFilePath = outputFile.getAbsolutePath();
//
//    if (!inputFile.exists()) {
//      log.error("输入文件:{}不存在！", inputFilePath);
//      return false;
//    }
//    try {
//      long time = System.currentTimeMillis();
//      DocumentConverter converter = jodConverterBean.getConverter();
//      converter.convert(inputFile).to(outputFile).execute();
//      log.info("文件：{}转成pdf：{}完成，用时{}毫秒！", inputFilePath, outputFilePath, System.currentTimeMillis() - time);
//      return true;
//    } catch (Exception e) {
//      log.error("文件：{}转成pdf：{}失败！", inputFilePath, outputFilePath, e);
//      return false;
//    } finally {
//
//    }
//  }*/
//
//  /**
//   * office转成pdf
//   * 利用Aspose.Words实现
//   * 效果满意
//   */
//  public static boolean office2pdf2(File inputFile, File outputFile) {
//    String inputFilePath = inputFile.getAbsolutePath();
//    String outputFilePath = outputFile.getAbsolutePath();
//
//    if (!isLicensed) {
//      log.error("Aspose.Words的License未通过验证程序不会继续");
//      return false;
//    }
//    if (!inputFile.exists()) {
//      log.error("输入文件:{}不存在！", inputFilePath);
//      return false;
//    }
//
//    FileOutputStream os = null;
//    try {
//      long time = System.currentTimeMillis();
//      os = new FileOutputStream(outputFile);
//      Document doc = new Document(inputFilePath);
//      doc.save(os, SaveFormat.PDF);
//      log.info("文件：{}转成pdf：{}完成，用时{}毫秒！", inputFilePath, outputFilePath, System.currentTimeMillis() - time);
//      return false;
//    } catch (Exception e) {
//      log.error("文件：{}转成pdf：{}失败！", inputFilePath, outputFilePath, e);
//      return false;
//    } finally {
//      IOUtils.closeQuietly(os);
//    }
//  }
//
//  /**
//   * 使用Aspose.Words前都要验证License 若不验证则转化出的pdf文档有水印
//   */
//  public static boolean checkLicense() {
//    boolean result = false;
//    InputStream is = null;
//    try {
//      is = com.aspose.words.Document.class.getResourceAsStream("/com.aspose.words.lic_2999.xml");
//      License asposeLicense = new License();
//      asposeLicense.setLicense(is);
//      result = asposeLicense.isLicensed();
//    } catch (Exception e) {
//      log.error("Aspose.Words验证License过程中发生异常", e);
//    } finally {
//      IOUtils.closeQuietly(is);
//    }
//    return result;
//  }
//
//  /**
//   * pdf转成多个jpg
//   * 利用pdfbox实现
//   */
//  public static boolean pdf2jpgs(File inputFile, File outputDir) {
//    String inputFilePath = inputFile.getAbsolutePath();
//    String outputDirPath = outputDir.getAbsolutePath();
//
//    if (!inputFile.exists()) {
//      log.error("输入文件:{}不存在！", inputFilePath);
//      return false;
//    }
//    PDDocument document = null;
//    try {
//      long time = System.currentTimeMillis();
//      document = PDDocument.load(inputFile);
//      PDFRenderer pdfRenderer = new PDFRenderer(document);
//      String inputFilePrefixName = FileUtil.mainName(inputFile);
//      String outputFileName = inputFilePrefixName + ".jpg";//jpg文件初始名称
//      for (int page = 0; page < document.getNumberOfPages(); page++) {
//        if (document.getNumberOfPages() > 1) {//如果pdf有多页则在jpg文件名加页码
//          outputFileName = inputFilePrefixName + "-" + (page + 1) + ".jpg";
//        }
//        BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);
//        String outputFilePath = FilenameUtils.concat(outputDir.getPath(), outputFileName);
//        ImageIOUtil.writeImage(bim, outputFilePath, 300);
//      }
//      log.info("文件：{}转成jpg到：{}完成，用时{}毫秒！", inputFilePath, outputDirPath, System.currentTimeMillis() - time);
//      return true;
//    } catch (IOException e) {
//      log.error("文件：{}转成jpg到：{}失败！", inputFilePath, outputDirPath, e);
//      return false;
//    } finally {
//      IOUtils.closeQuietly(document);
//    }
//  }
//
//  /**
//   * office文件转成多个jpg
//   * @param inputFile 输入文件
//   * @param outputDir 输出文件所在文件夹
//   * 先用Aspose.Words将office转成pdf
//   * 再用pdfbox将pdf转成多个jpg
//   * 转换效果是最好的 文字没有锯齿 但过程较复杂
//   */
//  public static boolean office2jpgs(File inputFile, File outputDir) {
//    //规划临时pdf文件的路径和名称
//    File tempDir = new File(System.getProperty(StaticValue.PATH_KEY_FOR_TMP), UUID.randomUUID().toString());
//    tempDir.mkdirs();
//    File pdfFile = new File(tempDir, FileUtil.mainName(inputFile) + ".pdf");
//    //office转pdf
//    boolean b = office2pdf2(inputFile, pdfFile);
//    boolean b2 = false;
//    if (b){
//      //pdf转多个jpg
//      b2 = pdf2jpgs(pdfFile, outputDir);
//    }
//    //删除临时文件夹其中包括临时pdf文件
//    FileUtils.deleteQuietly(tempDir);
//    return b && b2;
//  }
//
//  /**
//   * office转成多个jpg
//   * @param inputFile 输入文件
//   * @param outputDir 输出文件所在文件夹
//   * 利用Aspose.Words实现
//   */
//  public static boolean office2jpgs2(File inputFile, File outputDir) {
//    FileInputStream inputStream = null;
//    String inputFileName = null;
//    String outputDirPath = outputDir.getAbsolutePath();
//    try {
//      inputStream = new FileInputStream(inputFile);
//      inputFileName = inputFile.getName();
//      return office2jpgs2(inputStream, inputFile.getName(), outputDir);
//    } catch (FileNotFoundException e) {
//      log.error("文件：{}转成jpg到：{}失败！", inputFileName, outputDirPath, e);
//      return false;
//    } finally {
//      IOUtils.closeQuietly(inputStream);
//    }
//  }
//
//  /**
//   * office转成多个jpg
//   * @param is 输入流
//   * @param inputFileName 输入流的文件名
//   * @param outputDir 输出文件所在文件夹
//   * 利用Aspose.Words实现
//   * 效果佳
//   */
//  public static boolean office2jpgs2(InputStream is, String inputFileName, File outputDir) {
//    String outputDirPath = outputDir.getAbsolutePath();
//
//    if (!isLicensed) {
//      log.error("Aspose.Words的License未通过验证程序不会继续");
//      return false;
//    }
//    if (StringUtils.isBlank(inputFileName)) {
//      log.error("没有为输入流指定文件名！");
//      return false;
//    }
//    if (is == null) {
//      log.error("{}的输入流为空！", inputFileName);
//      return false;
//    }
//
//    try {
//      long time = System.currentTimeMillis();
//      Document doc = new Document(is);
//      document2jpgs(doc, inputFileName, outputDir);
//      log.info("文件：{}转成jpg到：{}完成，用时{}毫秒！", inputFileName, outputDirPath, System.currentTimeMillis() - time);
//      return true;
//    } catch (Exception e) {
//      log.error("文件：{}转成jpg到：{}失败！", inputFileName, outputDirPath, e);
//      return false;
//    } finally {
//    }
//  }
//
//  /**
//   * com.aspose.words.Document转成多个jpg
//   */
//  private static void document2jpgs(Document doc, String inputFileName, File outputDir) throws Exception {
//    ImageSaveOptions options = new ImageSaveOptions(SaveFormat.JPEG);
//    options.setUseAntiAliasing(true);//抗锯齿
//    options.setUseHighQualityRendering(true);
//    options.setResolution(300);
//    options.setPrettyFormat(false);//make HTML, MHTML, EPUB, WordML, RTF, DOCX and ODT output human readable. Useful for testing or debugging
//    String inputFilePrefixName = FileUtil.mainName(inputFileName);
//    String outputFileName = inputFilePrefixName + ".jpg";//jpg文件初始名称
//    int pageCount = doc.getPageCount();
//    for (int i = 0; i < pageCount; i++) {
//      if (pageCount > 1) {//如果word有多页则在jpg文件名加页码
//        outputFileName = inputFilePrefixName + "-" + (i + 1) + ".jpg";
//      }
//      options.setPageIndex(i);
//      String outputFilePath = FilenameUtils.concat(outputDir.getPath(), outputFileName);
//      doc.save(outputFilePath, options);
//    }
//  }
//
//}
